////////////////////////////////////////////////////////////////////////////////
/// @file     GPIO.c
/// @author   ZZC
/// @brief    
////////////////////////////////////////////////////////////////////////////////
#include "pcb_def_led.h"
#include "hal_conf.h"
////////////////////////////////////////////////////////////////////////////////
/// @brief  GPIO_Mode_Init
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
static void GPIO_Mode_Init(GPIO_TypeDef *GPIOx,uint8_t PinNum,GPIOMode_TypeDef Dir)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_StructInit(&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin  = (1ul<<PinNum);
    GPIO_InitStructure.GPIO_Mode = Dir;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOx, &GPIO_InitStructure);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief  GPIO_UP
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void GPIO_UP(GPIO_TypeDef *GPIOx,uint8_t PinNum)
{
	if(PinNum<8)
	{
		GPIOx->CRL = (GPIOx->CRL&(~(GPIO_CNF_MODE_MASK << (4*PinNum))))|(GPIO_CNF_MODE_INPUPD << (4*PinNum));
	}	
	else
	{
		GPIOx->CRH = (GPIOx->CRH&(~(GPIO_CNF_MODE_MASK << (4*(PinNum-8)))))|(GPIO_CNF_MODE_INPUPD << (4*(PinNum-8)));
	}
	GPIOx->BSRR  = (1<<PinNum);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief  GPIO_NO_UP
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void GPIO_NO_UP(GPIO_TypeDef *GPIOx,uint8_t PinNum)
{
	if(PinNum<8)
	{
		GPIOx->CRL = (GPIOx->CRL&(~(GPIO_CNF_MODE_MASK << (4*PinNum))))|(GPIO_CNF_MODE_FLOATING << (4*PinNum));
	}	
	else
	{
		GPIOx->CRH = (GPIOx->CRH&(~(GPIO_CNF_MODE_MASK << (4*(PinNum-8)))))|(GPIO_CNF_MODE_FLOATING << (4*(PinNum-8)));
	}
}
////////////////////////////////////////////////////////////////////////////////
/// @brief  GPIO_STU
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
unsigned char GPIO_STU(GPIO_TypeDef *GPIOx,uint8_t PinNum)
{
	return (((GPIOx->IDR)&(1<<PinNum))?1:0); 
}
////////////////////////////////////////////////////////////////////////////////
/// @brief  USER_GPIO_Init
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void USER_GPIO_Init(void)
{
#ifdef P_SCL_Mode
	GPIO_Mode_Init(P_SCL_PORT,P_SCL_PIN,P_SCL_Mode);
#endif 
#ifdef P_SDA_Mode
	GPIO_Mode_Init(P_SDA_PORT,P_SDA_PIN,P_SDA_Mode);
#endif 
#ifdef P_LAT_Mode
	GPIO_Mode_Init(P_LAT_PORT,P_LAT_PIN,P_LAT_Mode);
#endif 	
#ifdef P_PDM_Mode
	GPIO_Mode_Init(P_PDM_PORT,P_PDM_PIN,P_PDM_Mode);
#endif 
#ifdef P_CS_Mode
	GPIO_Mode_Init(P_CS_PORT,P_CS_PIN,P_CS_Mode);
#endif 	
#ifdef P_CS2_Mode
	GPIO_Mode_Init(P_CS2_PORT,P_CS2_PIN,P_CS2_Mode);
#endif 	
#ifdef P_SCL2_Mode
	GPIO_Mode_Init(P_SCL2_PORT,P_SCL2_PIN,P_SCL2_Mode);
#endif 
#ifdef P_SDA2_Mode
	GPIO_Mode_Init(P_SDA2_PORT,P_SDA2_PIN,P_SDA2_Mode);
#endif
#ifdef P_TX_Mode
	GPIO_Mode_Init(P_TX_PORT,P_TX_PIN,P_TX_Mode);
#endif
#ifdef P_RTS_Mode
	GPIO_Mode_Init(P_RTS_PORT,P_RTS_PIN,P_RTS_Mode);
#endif
#ifdef P_RX_Mode
	GPIO_Mode_Init(P_RX_PORT,P_RX_PIN,P_RX_Mode);
#endif
#ifdef P_RX2_Mode
	GPIO_Mode_Init(P_RX2_PORT,P_RX2_PIN,P_RX2_Mode);
#endif
#ifdef P_DD_Mode
	GPIO_Mode_Init(P_DD_PORT,P_DD_PIN,P_DD_Mode);	
#endif
#ifdef P_DD_NEAR_Mode
	GPIO_Mode_Init(P_DD_NEAR_PORT,P_DD_NEAR_PIN,P_DD_NEAR_Mode);	
#endif
#ifdef P_YZX_Mode
	GPIO_Mode_Init(P_YZX_PORT,P_YZX_PIN,P_YZX_Mode);
#endif
#ifdef P_ZZX_Mode
	GPIO_Mode_Init(P_ZZX_PORT,P_ZZX_PIN,P_ZZX_Mode);
#endif
#ifdef P_3D_Mode
	GPIO_Mode_Init(P_3D_PORT,P_3D_PIN,P_3D_Mode);
#endif
#ifdef P_2D_Mode
	GPIO_Mode_Init(P_2D_PORT,P_2D_PIN,P_2D_Mode);
#endif
#ifdef P_1D_Mode
	GPIO_Mode_Init(P_1D_PORT,P_1D_PIN,P_1D_Mode);
#endif
#ifdef P_CD_Mode
	GPIO_Mode_Init(P_CD_PORT,P_CD_PIN,P_CD_Mode);
#endif
#ifdef P_M2_Mode
	GPIO_Mode_Init(P_M2_PORT,P_M2_PIN,P_M2_Mode);
#endif
#ifdef P_VOL_Mode
	GPIO_Mode_Init(P_VOL_PORT,P_VOL_PIN,P_VOL_Mode);
#endif
#ifdef P_SD1_Mode
	GPIO_Mode_Init(P_SD1_PORT,P_SD1_PIN,P_SD1_Mode);
#endif

#ifdef P_NZR_Mode
	GPIO_Mode_Init(P_NZR_PORT,P_NZR_PIN,P_NZR_Mode);
#endif 
#ifdef P_VOICE_Q5989_Mode
	GPIO_Mode_Init(P_VOICE_Q5989_PORT,P_VOICE_Q5989_PIN,P_VOICE_Q5989_Mode);
#endif 
#ifdef P_GRID1_Mode
	GPIO_Mode_Init(P_GRID1_PORT,P_GRID1_PIN,P_GRID1_Mode);
#endif 

#ifdef P_GRID2_Mode
	GPIO_Mode_Init(P_GRID2_PORT,P_GRID2_PIN,P_GRID2_Mode);
#endif 

#ifdef P_KZ_FWD_Mode
	GPIO_Mode_Init(P_KZ_FWD_PORT,P_KZ_FWD_PIN,P_KZ_FWD_Mode);
#endif 

#ifdef P_VOICE_Q5989_Mode
	GPIO_Mode_Init(P_VOICE_Q5989_PORT,P_VOICE_Q5989_PIN,P_VOICE_Q5989_Mode);
#endif
#ifdef P_KZ1_Mode
	GPIO_Mode_Init(P_KZ1_PORT,P_KZ1_PIN,P_KZ1_Mode);
#endif
#ifdef P_KZ2_Mode
	GPIO_Mode_Init(P_KZ2_PORT,P_KZ2_PIN,P_KZ2_Mode);
#endif
#ifdef P_KZ3_Mode
	GPIO_Mode_Init(P_KZ3_PORT,P_KZ3_PIN,P_KZ3_Mode);
#endif
#ifdef P_KZ4_Mode
	GPIO_Mode_Init(P_KZ4_PORT,P_KZ4_PIN,P_KZ4_Mode);
#endif

#ifdef P_KZ_Mode
	GPIO_Mode_Init(P_KZ_PORT,P_KZ_PIN,P_KZ_Mode);
#endif

#ifdef P_R_Mode
	GPIO_Mode_Init(P_R_PORT,P_R_PIN,P_R_Mode);
#endif

#ifdef P_G_Mode
	GPIO_Mode_Init(P_G_PORT,P_G_PIN,P_G_Mode);
#endif

#ifdef P_B_Mode
	GPIO_Mode_Init(P_B_PORT,P_B_PIN,P_B_Mode);
#endif

}




